package com.wicket.okrfinance.integration.dto;

import com.wicket.okrfinance.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.NotNull;
import lombok.Data;

/**
 * @desc ImplementAccountFundHandleComReqDto
 * @使用场景
 */
@Data
public class ImplementAccountFundHandleComReqDto
  extends BaseDto
  implements Serializable {

  /**
   * 账户ID
   */
  @NotNull(message = "账户ID不能为空")
  @ApiModelProperty("账户ID")
  private String accountId;

  /**
   * 账单金额
   */
  @NotNull(message = "账单金额不能为空")
  @ApiModelProperty("账单金额")
  private Double billAmount;

  /**
   * 收支类型 INCOME:收入 SPENDING:支出
   */
  @ApiModelProperty("收支类型")
  private String billTypeCode;

  /**
   * 账户操作类型 ADD_BUDGET:增预算 DEC_BUDGET:减预算 USE_BUDGET:使用预算 AVAILABLE_AMOUNT_EXPENDITURE:可用金额支出 AVAILABLE_AMOUNT_INCOME:可用金额收入
   */
  @NotNull(message = "账户操作类型不能为空")
  @ApiModelProperty("账户操作类型")
  private String accountOptType;

  /**
   * 是否发生方账单 TRUE:是 FALSE:否
   */
  @NotNull(message = "是否发生方账单不能为空")
  @ApiModelProperty("是否发生方账单")
  private String isOriginBill;

  /**
   * 是否对接财务 TRUE:是 FALSE:否
   */
  @NotNull(message = "是否对接财务不能为空")
  @ApiModelProperty("是否对接财务")
  private String isButtFinance;

  /**
   * 流水业务故事信息
   */
  @NotNull(message = "流水业务故事信息不能为空")
  @ApiModelProperty("流水业务故事信息")
  private String billBizStory;

  /**
   * 对方账户ID
   */
  @ApiModelProperty("对方账户ID")
  private String oppositeAccountId;

  /**
   * 对方账户余额
   */
  @ApiModelProperty("对方账户余额")
  private Double oppositeAccountBalance;

  /**
   * 对方账户归属主体ID
   */
  @ApiModelProperty("对方账户归属主体ID")
  private String oppositeObjectId;

  /**
   * 对方账户归属主体类型编码
   */
  @ApiModelProperty("对方账户归属主体类型编码")
  private String oppositeObjectTypeCode;

  /**
   * 对方logo
   */
  @ApiModelProperty("对方logo")
  private String oppositeLogo;

  /**
   * 对方名称
   */
  @ApiModelProperty("对方名称")
  private String oppositeName;

  /**
   * 对方支付渠道账户（账户编码）
   */
  @ApiModelProperty("对方支付渠道账户（账户编码）")
  private String oppositeAccountCode;

  /**
   * 对方支付渠道账户名称
   */
  @ApiModelProperty("对方支付渠道账户名称")
  private String oppositeAccountName;

  /**
   * 对方银行开户行名称
   */
  @ApiModelProperty("对方银行开户行名称")
  private String oppositeOpeningBankName;

  /**
   * 收支方式 ONLINE_PAYMENT:在线支付 PAY_DELIVERY:货到付款 CASH:现金 ON_CREDIT:赊账 TALLY:记账
   */
  @NotNull(message = "收支方式不能为空")
  @ApiModelProperty("收支方式")
  private String billMethod;

  /**
   * 支付渠道 ALIPAY:支付宝 WE_CHAT_PAY:微信支付 BANK_CARD:银行卡
   */
  @ApiModelProperty("支付渠道")
  private String payChannel;

  /**
   * 支付渠道支付单号
   */
  @ApiModelProperty("支付渠道支付单号")
  private String payChannelOrderNo;

  /**
   * 关联业务单据对象ID
   */
  @ApiModelProperty("关联业务单据对象ID")
  private String bizBillObjectId;

  /**
   * 关联业务单据对象类型 TRADING_ORDER:交易订单 WITHDRAWAL_DOCUMENT:提现单 PROJECT:项目
   */
  @ApiModelProperty("关联业务单据对象类型")
  private String bizBillObjectTypeCode;

  /**
   * 账单状态 UNDERWAY:进行中 COMPLETE:完成 CLOSE:关闭
   */
  @NotNull(message = "账单状态不能为空")
  @ApiModelProperty("账单状态")
  private String billStatus;

  /**
   * 费用科目类型
   */
  @ApiModelProperty("费用科目类型")
  private String accountSubjectTypeCode;

  /**
   * 费用科目ID
   */
  @ApiModelProperty("费用科目ID")
  private String accountSubjectId;

  /**
   * 冗余内容科目ID
   */
  @ApiModelProperty("冗余内容科目ID")
  private String contnetAccountSubjectld;

  /**
   * 冗余资金来源ID
   */
  @ApiModelProperty("冗余资金来源ID")
  private String capitalSourceId;

  /**
   * 记录结算引擎ID
   */
  @ApiModelProperty("记录结算引擎ID")
  private String expensesSettleEngineId;

}
